#include <iostream>
#include <string>
#include <ctime>

using namespace std;

/**
 * 结构体案例2
 * 要求:
 * 设计一个英雄的结构体，包括成员姓名，年龄，性别：创建结构体数组，数组中存放5名英雄。
 * 通过冒泡排序算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。
 */
struct Hero
{
    string name;
    int age;
    string gender;
};

void addHero(struct Hero heroArr[], int len)
{
    string endFix = "ABCDE";

    for (int i = 0; i < len; i++)
    {
        int randAge = rand() % 50 + 20;
        heroArr[i].name = "Hero_";
        heroArr[i].name += endFix[i];
        heroArr[i].age = randAge;
        heroArr[i].gender = "male";
    }
}
void bubbleSort(struct Hero heroArr[], int len)
{
    for (int i = 0; i < len - 1; i++)
    {
        for (int j = 0; j < len - i - 1; j++)
        {
            if (heroArr[j].age > heroArr[j + 1].age)
            {
                struct Hero tmp = heroArr[j];
                heroArr[j] = heroArr[j + 1];
                heroArr[j + 1] = tmp;
            }
        }
    }
}
void printInfo(struct Hero heroArr[], int len)
{
    for (int i = 0; i < len; i++)
    {
        cout << "英雄名称: " << heroArr[i].name << "  英雄年龄: " << heroArr[i].age << "  英雄性别: " << heroArr[i].gender << endl;
    }
}

int main()
{
    // 随机数种子
    srand((unsigned int)time(NULL));
    // 1.存放5名英雄的数组
    struct Hero heroArr[5];

    // 计算数组长度
    int len = sizeof(heroArr) / sizeof(heroArr[0]);
    // 2.添加5名英雄到数组
    addHero(heroArr, len);

    // 3.冒泡排序
    bubbleSort(heroArr, len);
    // 4.打印数据
    printInfo(heroArr, len);
    //     英雄名称: Hero_B  英雄年龄: 23  英雄性别: male
    // 英雄名称: Hero_D  英雄年龄: 35  英雄性别: male
    // 英雄名称: Hero_E  英雄年龄: 47  英雄性别: male
    // 英雄名称: Hero_C  英雄年龄: 58  英雄性别: male
    // 英雄名称: Hero_A  英雄年龄: 67  英雄性别: male

    return 0;
}